/**
 * 主题管理模块
 * 处理系统主题检测与同步
 * @author LYC
 * @date 2025-09-14
 */

import { nativeTheme, ipcMain, BrowserWindow } from 'electron'

/**
 * 主题管理器类
 */
export class ThemeManager {
  private static instance: ThemeManager

  private constructor() {
    // 初始化监听系统主题变化
    nativeTheme.on('updated', () => {
      this.syncThemeToAllWindows()
    })
  }

  public static getInstance(): ThemeManager {
    if (!ThemeManager.instance) {
      ThemeManager.instance = new ThemeManager()
    }
    return ThemeManager.instance
  }

  /**
   * 同步主题到所有窗口
   */
  private syncThemeToAllWindows() {
    const isDark = nativeTheme.shouldUseDarkColors
    BrowserWindow.getAllWindows().forEach((win) => {
      win.webContents.send('system-theme-changed', isDark ? 'dark' : 'light')
    })
    console.log(`系统主题变更同步到所有窗口: ${isDark ? '深色' : '浅色'}`)
  }

  /**
   * 初始化IPC处理器
   */
  public initializeHandlers() {
    console.log('设置主题相关的IPC处理器...')

    // 获取系统主题
    ipcMain.handle('get-system-theme', () => {
      const isDark = nativeTheme.shouldUseDarkColors
      console.log(`获取系统主题: ${isDark ? '深色' : '浅色'}`)
      return isDark ? 'dark' : 'light'
    })

    // 设置应用主题
    ipcMain.handle('set-theme-source', (_, source: 'system' | 'light' | 'dark') => {
      console.log(`设置主题源: ${source}`)
      nativeTheme.themeSource = source
      return nativeTheme.shouldUseDarkColors ? 'dark' : 'light'
    })

    return this
  }
}

/**
 * 获取主题管理器实例的工厂函数
 */
export const getThemeManager = (): ThemeManager => {
  return ThemeManager.getInstance()
}
